package br.ufrn.sipac.patrimonio.coletor.activity;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import br.ufrn.sipac.patrimonio.auxiliares.TipoEstadoBem;
import br.ufrn.sipac.patrimonio.coletor.R;
import br.ufrn.sipac.patrimonio.coletor.controller.DatabaseController;
import br.ufrn.sipac.patrimonio.coletor.controller.LevantamentoController;
import br.ufrn.sipac.patrimonio.coletor.controller.MainController;
import br.ufrn.sipac.patrimonio.coletor.dominio.Bem;
import br.ufrn.sipac.patrimonio.coletor.dominio.ItemLevantamento;
import br.ufrn.sipac.patrimonio.coletor.exception.DatabaseException;
import br.ufrn.sipac.patrimonio.coletor.exception.NegocioException;

/**
 * Activity responsável por cadastrar um novo item no levantamento;
 * 
 * @author Giuliana Silva Bezerra
 * 
 */
public class CadastroItemLevantamentoActivity extends Activity {
	/** Contém a lista de estados de um bem. */
	private Spinner estadoBem;
	private List<TipoEstadoBem> listaEstadoBem = new ArrayList<TipoEstadoBem>();
	/** Contém a marca do bem. */
	private EditText marca;
	/** Contém a descrição do bem. */
	private EditText descricao;
	/** Permite o cadastro do item no levantamento atual. */
	private Button proximo;
	/** Contém o tombo do bem. */
	private TextView tombo;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_cadastro_item_levantamento);

		// Mapear os componente da tela
		tombo = (TextView) findViewById(R.id.textView4);
		estadoBem = (Spinner) findViewById(R.id.spinner1);
		marca = (EditText) findViewById(R.id.editText2);
		proximo = (Button) findViewById(R.id.button1);
		descricao = (EditText) findViewById(R.id.editText3);

		// Inicializa os componentes
		tombo.setText(MainController.getTombo());
		listaEstadoBem.add(new TipoEstadoBem(TipoEstadoBem.EM_USO, "EM USO"));
		listaEstadoBem.add(new TipoEstadoBem(TipoEstadoBem.OCIOSO, "OCIOSO"));
		listaEstadoBem.add(new TipoEstadoBem(TipoEstadoBem.DEFEITUOSO,
				"DEFEITUOSO"));
		// Cria um ArrayAdapter usando um padrão de layout da classe R do
		// android, passando o ArrayList com as finalidades e as unidades
		ArrayAdapter<TipoEstadoBem> arrayAdapter = new ArrayAdapter<TipoEstadoBem>(
				this, android.R.layout.simple_spinner_dropdown_item,
				listaEstadoBem);
		arrayAdapter
				.setDropDownViewResource(android.R.layout.simple_spinner_item);
		estadoBem.setAdapter(arrayAdapter);
		descricao.requestFocus();

		// Adiciona listeners
		proximo.setOnClickListener(new CadastraItemListener());
	}

	/**
	 * Cadastra um item do levantamento com os dados fornecidos.
	 */
	public void cadastraItem() throws NegocioException {
		// GenericDAO gen = new GenericDAO();
		Bem bem = LevantamentoController.getInstance().getBem();
		// Descrição ou marca do bem não informada(s).
		if ((descricao.getText().toString().trim().length() == 0 || marca
				.getText().toString().trim().length() == 0))
			throw new NegocioException(
					"Necessário preencher a marca e a descrição do bem.", this);
		try {
			if (descricao.getText().toString().trim().length() > 0
					&& marca.getText().toString().trim().length() > 0) {

				MainController.setCountBensNaoCadastrados(MainController
						.getCountBensNaoCadastrados() + 1);
				ItemLevantamento item = new ItemLevantamento();
				item.setBem(null);
				item.setLevantamento(LevantamentoController.getInstance().getLevantamento());
				item.setNumTombamento(tombo.getText().toString());
				item.setMarca(marca.getText().toString());
				item.setDenominacao(descricao.getText().toString());
				item.setEstado(((TipoEstadoBem) estadoBem.getSelectedItem())
						.getId());
				DatabaseController.create(item, this);

				MainController.getBensNaoCadastrados().add(item);
				marca.setText("");
				descricao.setText("");
				descricao.setEnabled(false);
				marca.setEnabled(false);
				tombo.setText("");
				tombo.requestFocus();
			}
		} catch (DatabaseException e) {
		}
		tombo.requestFocus();
		// Limpa os dados do bem
		LevantamentoController.getInstance().setBem(null);
		// Encaminha para a activity de leitura de dados
		finish();
		Intent intent = new Intent(this, LeituraActivity.class);
		startActivity(intent);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.cadastro_item_levantamento, menu);
		return true;
	}

	public class CadastraItemListener implements Button.OnClickListener {
		@Override
		public void onClick(View v) {
			try {
				cadastraItem();
			} catch (NegocioException e) {
			}
		}

	}

	@Override
	public void onBackPressed() {
		// Desabilita botão voltar.
	}
}
